AnnotatedRegionLayers はクリッピング領域を基準としたローカル位置を返します
まとめ
によって返されるローカル位置AnnotatedRegionLayers
で
注釈の検索がクリッピングに相対するように変更されました。
レイヤーの代わりに領域を指定します。これにより、局所的な位置がさらに高くなります
意味があり信頼性がありますが、直接実行するコードは壊れます
アノテーションはローカル位置を検索して使用します。
コンテクスト
注釈は、 画面上の領域へのレンダリング フェーズ。 位置を指定して注釈を検索すると、 その場所を含むコンテキスト情報。 これらは、マウス イベントとアプリ バーのテーマを検出するために使用されます。
いつlocalPosition
最初に検索結果に追加されましたが、
アノテーションを所有するレイヤーを基準として定義されていましたが、
それは設計ミスであることが判明しました。
レイヤーからのオフセットは無意味で信頼性がありません。
たとえば、Transform
ウィジェットは同じレイヤーに描画されます
変換行列が単純な変換の場合はオフセットを使用します。
または専用のボタンを押しますTransformLayer
行列が自明でない場合。
前者の場合は、以前の座標原点が保持されます。
(たとえば、アプリの左上隅)、
一方、後者の場合は位置の原点を移動します。
新しいレイヤー上にあります。 2 つのケースでは、目立った結果が得られない可能性があります
追加のレイヤーは単なるスケールである可能性があるため、視覚的な違いがあります。
注釈検索では異なる結果が返されるにもかかわらず、99% です。
このローカル位置を信頼できるものにするために、次のことを選択する必要があります。
こだわりたい結果の一つ。
変更内容の説明
のlocalPosition
によって返されましたAnnotatedRegionLayer
受信したローカル位置から減算された値になります。offset
、
どこoffset
クリッピング領域の相対的な位置です
レイヤーに。
class AnnotatedRegionLayer<T> extends ContainerLayer {
@override
bool findAnnotations<S>(AnnotationResult<S> result, Offset localPosition, { required bool onlyFirst }) {
...
if (/* shouldAddAnnotation */) {
result.add(AnnotationEntry<S>(
annotation: typedValue,
// Used to be:
// localPosition: localPosition,
localPosition: localPosition - offset,
));
}
...
}
}
概念的には、これにより方法が変わりましたAnnotatedRegionLayer.offset
とsize
が定義されています。それらはかつて意味していました
「注釈の検索を制限するクリッピング四角形」、
彼らは現在共同代表を務めていますが、
「注釈オブジェクトの領域」。
移行ガイド
このローカル位置を積極的に使用しているコードはおそらく次のとおりです。
レンダーオブジェクトを使用するため、レイヤーと直接対話するか、
ウィジェットにより、この結果はすでに信頼性が低くなります。そうするには
以前の動作を保存すると、再実装できますAnnotatedRegionLayer
なしでローカル位置を返す
オフセットを減算します。
タイムライン
リリースされたバージョン: 1.15.2
安定版リリース: 1.17
参考文献
API ドキュメント:
AnnotatedRegionLayer
AnnotationEntry
関連する問題:
- 問題 #49568
関連する PR:
- Annotation の localPosition をオブジェクトに対して相対的にする